import { Message } from 'element-ui'
import { getToken } from '@/utils/auth' // get token from cookie

function revertUTF8 (szInput) {
  let x
  let wch
  let wch1
  let wch2
  let szRet = ''
  for (x = 0; x < szInput.length; x++) {
    if (szInput.charAt(x) === '%') {
      wch = parseInt(szInput.charAt(++x) + szInput.charAt(++x), 16)
      if (!wch) { break }
      if (!(wch & 0x20)) {
        x++
        wch1 = parseInt(szInput.charAt(++x) + szInput.charAt(++x), 16)
        wch = (wch & 0x1F) << 6
        wch1 = wch1 & 0x3F
        wch = wch + wch1
      } else {
        x++
        wch1 = parseInt(szInput.charAt(++x) + szInput.charAt(++x), 16)
        x++
        wch2 = parseInt(szInput.charAt(++x) + szInput.charAt(++x), 16)
        wch = (wch & 0x0F) << 12
        wch1 = (wch1 & 0x3F) << 6
        wch2 = (wch2 & 0x3F)
        wch = wch + wch1 + wch2
      }
      szRet += String.fromCharCode(wch)
    } else {
      szRet += szInput.charAt(x)
    }
  }
  return (szRet)
}

// blob下载, flag: 通用接口下载
export function toXHR (files, method = 'POST') {
  const xhr = new XMLHttpRequest()
  const url = '/base/attachment/downloadZip' // url填写后台的接口地址，如果是post，在formData append参数（参考原文地址
  xhr.open(method, url)
  xhr.setRequestHeader('ticket', getToken())
  xhr.responseType = 'blob'
  xhr.onload = function () {
    if (this.status === 200) {
      const blob = this.response
      if (this.response.type === 'application/json') {
        Message.error('文件下载失败！')
        return
      }
      const filename = `${new Date().getTime()}.zip` // 这里的名字，可以按后端给的接口固定表单设置一下名字，如（费用单.xlsx,合同.doc等等）
      if (window.navigator.msSaveOrOpenBlob) {
        navigator.msSaveBlob(blob, filename)
      } else {
        const a = document.createElement('a')
        const newurl = URL.createObjectURL(blob)
        a.href = newurl
        a.download = revertUTF8(filename)
        document.body.appendChild(a)
        a.click()
        window.URL.revokeObjectURL(newurl)
      }
    }
  }
  xhr.send(JSON.stringify(files))
}

export const downloadCode = (value, fileName) => {
  console.log(value)
  // 定义文件内容，类型必须为Blob 否则createObjectURL会报错，this.code 为文本内容
  const content = new Blob([value])
  // 生成url对象
  const urlObject = window.URL || window.webkitURL || window
  const url = urlObject.createObjectURL(content)
  // 生成<a></a>DOM元素
  const el = document.createElement('a')
  // 链接赋值
  el.href = url
  el.download = fileName
  // 必须点击否则不会下载
  el.click()
  // 移除链接释放资源
  urlObject.revokeObjectURL(url)
}
